반사 에이전트에서 계획 에이전트로
에이전트 설계의 발전 과정에서 우리는 반사 에이전트에서, 이는 간단한 규칙에 따라 지각을 행동으로 직접 매핑합니다 (예: "앞 차가 브레이크를 밟으면 브레이크를 밟기 시작"). 문제 해결 에이전트로 이동합니다. 반사 에이전트는 즉각적인 맥락에서 작동하는 반면, 문제 해결 에이전트는 목표 기반입니다. 이들은 특정 목표를 만족하는 시퀀스를 찾기 위해 행동의 미래 결과를 고려합니다.
- 반사 에이전트: $Action = Function(Percept)$
- 계획 에이전트: $Action\_Sequence = Search(State, Goal)$
원자적 상태 표현
이 기본적인 수준에서 에이전트는 원자적 표현을 사용합니다. 이는 세상의 상태가 블랙박스로 취급된다는 것을 의미합니다 - 검색 알고리즘에 내부 구조가 보이지 않는 단일 노드입니다. 에이전트는 다음만을 추론합니다:
- 상태 ($S$): 환경의 스냅샷.
- 행동 ($A$): 상태 간의 전환.
- 목표 테스트: 상태 $s \in S_{goal}$인지 여부를 확인하는 불리언 검사.
문제 해결 루프
문제 해결 에이전트는 환경을 탐색하기 위해 뚜렷한 4단계 주기를 따릅니다:
- 목표 공식화: 현재 상황에 따라 추구할 목표를 결정합니다.
- 문제 공식화: 실제 세계를 수학적 모델(상태 및 행동)로 추상화합니다.
- 검색: 시퀀스의 행동을 시뮬레이션하여 최적 경로.
- 실행: 검색 단계에서 찾은 행동을 추가적인 심의 없이 수행합니다(정적인 환경이라고 가정).
Python 구현 (agent_types.py)
1
class ReflexAgent:
2
defact()self, percept):
3
# 직접 매핑: 규칙 -> 행동
4
return rules.get(percept, default_action)
5
6
class ProblemSolvingAgent:
7
def__init__()self):
8
self.seq = [] # 버퍼링된 행동 시퀀스
9
10
defact()self, percept):
11
# 실행 중인 경우 계속
12
ifself.seq:
13
returnself.seq.pop()0()
14
15
# 그렇지 않으면, 계획 (검색)
16
state = self.update_state(percept)
17
goal = self.formulate_goal(state)
18
problem = self.formulate_problem(state, goal)
19
20
# 검색은 행동 목록을 반환합니다
21
self.seq = search_algorithm(problem)
22
23
returnself.seq.pop()0()